#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

unsigned long long vis[30][30];
bool s[30][30];
/*
题目描述：
给定卒要到达的位置，以及马的位置
马的位置及马一步可以到达的位置卒不可以走
卒只能向下或者向右
思路
给定一个二维数组s，标记马相关的位置（9个）不可走
*/
int Bx,By;
int Cx,Cy;
int main()
{
    memset(vis,0,sizeof(vis));  //初始化为0
    memset(s,0,sizeof(s));
    cin>>Bx>>By; // 最终要到达的位子
    cin>>Cx>>Cy; // 马的位置
    //对位置进行平移，不影响结果，方便计算
    Bx+=2;
    By+=2;
    Cx+=2;
    Cy+=2;
    //根据坐标C点坐标对vis数组进行初始化
    //下面的这些位置，卒不能踩
    s[Cx][Cy] = 1;
    s[Cx-2][Cy-1] = 1;
    s[Cx-2][Cy+1] = 1;
    s[Cx+2][Cy-1] = 1;
    s[Cx+2][Cy+1] = 1;
    s[Cx-1][Cy-2] = 1;
    s[Cx+1][Cy-2] = 1;
    s[Cx-1][Cy+2] = 1;
    s[Cx+1][Cy+2] = 1;
    vis[2][2] = 1; //开始的点，相当于0，0点
    for(int i=2;i<=Bx;i++)
        for(int j=2;j<=By;j++)
        {
            if(s[i][j]) continue; //该点不能行走
            vis[i][j] = max(vis[i][j],vis[i-1][j]+vis[i][j-1]); //要么是从(i,j)这个点的上方经过该点，要么从左边过来经过该点
        }
    cout<<vis[Bx][By];  //vis记录的是有几条路经过该点
    return 0;
}